#ifndef REFERENCE_HPP
#define REFERENCE_HPP

#include <QString>
#include <QList>
#include <QMetaType>
#include <QJsonObject>

// 定义 Reference 结构体
struct Reference {
    QString node;
    QString sname;
    int stype;   // input=0, output=1, servo=2
    int svalue;  // True=0, False=1
    QString sboard;
    QString sslot;

    QString ename;
    int etype;   // input=0, output=1, servo=2
    int evalue;  // True=0, False=1
    QString eboard;
    QString eslot;

    // 默认构造函数
    Reference()
        : stype(0), svalue(0), etype(0), evalue(0) {}

    // 参数化构造函数
    Reference(const QString& node_,
              const QString& sname_, int stype_, int svalue_,
              const QString& sboard_, const QString& sslot_,
              const QString& ename_, int etype_, int evalue_,
              const QString& eboard_, const QString& eslot_)
        : node(node_), sname(sname_), stype(stype_), svalue(svalue_),
          sboard(sboard_), sslot(sslot_),
          ename(ename_), etype(etype_), evalue(evalue_),
          eboard(eboard_), eslot(eslot_) {}

    // toJson 函数
    QJsonObject toJson() const {
        QJsonObject obj;
        obj["node"] = node;

        QJsonObject startObj;
        startObj["sname"] = sname;
        startObj["stype"] = stype;
        startObj["svalue"] = svalue;
        startObj["sboard"] = sboard;
        startObj["sslot"] = sslot;
        obj["start"] = startObj;

        QJsonObject endObj;
        endObj["ename"] = ename;
        endObj["etype"] = etype;
        endObj["evalue"] = evalue;
        endObj["eboard"] = eboard;
        endObj["eslot"] = eslot;
        obj["end"] = endObj;

        return obj;
    }
};

// 在结构体定义之后声明元类型
Q_DECLARE_METATYPE(Reference)

#endif // REFERENCE_HPP
